<HTML>

<HEAD>
  <TITLE>I/O Interface to Bochs Debugger</TITLE>
</HEAD>

<BODY TEXT="#000000" BGCOLOR="#ececec"  LINK="#3333cc" VLINK="#666666">

<CENTER><H1>I/O Interface to Bochs Debugger</H1></CENTER>

This device was added by Dave Poirier (eks@void-core.2y.net).

<p>
<b>Compiling bochs with support</b>
<blockquote>
<pre>
./configure --enable-iodebug
make
</pre>
Other optional fields may be added to the <cite>./configure</cite> line, see
bochs documentations for all the informations.
</blockquote>



<p>
<b>Using the I/O Interface to the debugger</b>
<blockquote>
<pre>
port range:  0x8A00 - 0x8A02
</pre>
<p>
Port <b>0x8A00</b> servers as command register.  You can use it to enable the
i/o interface, change which data register is active, etc.
<p>
Port <b>0x8A01</b> is used as data register for the memory monitoring.
<p>
Port <b>0x8A02</b> is used as data register for breakpoints/watchpoints.
</blockquote>



<p>
<b>Commands supported by the 0x8A00 port</b>
<blockquote>
<i>note: all accesses must be done using word</i><br>
<i>note2: reading this register will return 0x8A00 if currently activated, otherwise 0</i>
<pre>0x8A00</pre>
<p>
Used to enable the device.  Any I/O to the debug module before this command is
sent is sent will simply be ignored.
<p>
<pre>0x8A01</pre>
<p>
Selects register 0: Memory monitoring range start address (inclusive)
<p>
<pre>0x8A02</pre>
<p>
Selects register 1: Memory monitoring range end address (exclusive)
<p>
<pre>0x8A80</pre>
<p>
Enable address range memory monitoring as indicated by register 0 and 1 and clears both registers
<p>

<pre>0x8AE0 - Return to Debugger Prompt</pre>
<p>
If the debugger is enabled (via --enable-debugger), sending 0x8AE0 to port 0x8A00 after the device has been enabled will return the bochs to the debugger prompt. Basically the same as doing CTRL+C
<p>

<pre>0x8AE2 - Instruction Trace Disable</pre>
<p>
If the debugger is enabled (via --enable-debugger), sending 0x8AE2 to port 0x8A00 after the device has been enabled will disable instruction tracing
<p>

<pre>0x8AE3 - Instruction Trace Enable</pre>
<p>
If the debugger is enabled (via --enable-debugger), sending 0x8AE3 to port 0x8A00 after the device has been enabled will enable instruction tracing
<p>

<pre>0x8AE4 - Register Trace Disable</pre>
<p>
If the debugger is enabled (via --enable-debugger), sending 0x8AE4 to port 0x8A00 after the device has been enabled will disable register tracing.
<p>

<pre>0x8AE5 - Register Trace Enable</pre>
<p>
If the debugger is enabled (via --enable-debugger), sending 0x8AE5 to port 0x8A00 after the device has been enabled will enable register tracing.  This currently output the value of all the registers for each instruction traced.  Note: instruction tracing must be enabled to view the register tracing
<p>

<pre>0x8AFF</pre>
<p>
Disable the I/O interface to the debugger and the memory monitoring functions.
</blockquote>




<p>
<b>Access to port 0x8A01</b>
<blockquote>
<i>(write-only)</i>
<p>
All accesses to this port must be done using words.  Writing to this port will
shift to the left by 16 the current value of the register and add the provided
value to it.
<pre>
i.e:    reg0 = 0x01234567
        
	out port: 0x8A01 data: 0xABCD

	reg0 = 0x4567ABCD
</pre>

</body></html>
